#ifndef _CPTA_ASS_H
#define _CPTA_ASS_H

#include "Compta.h"

#define NOM_FONCTION( fonction)   fonction

 #ifdef _DLLCOMPTA
  #define DLLCOMPTAAPI(etype) extern "C" etype _export _cdecl
  #define COMPTA32API __declspec( dllexport)
  #pragma message( "DLLCOMPTAAPI(etype) = extern 'C' etype _export _cdecl" )
 #else
  #ifdef __BCPLUSPLUS__  
    #define DLLCOMPTAAPI(etype) extern "C" etype _import _cdecl
    #define COMPTA32API __declspec( dllimport)
  #else
    #define DLLCOMPTAAPI(etype) __declspec( dllimport ) etype  _cdecl
    #undef  NOM_FONCTION
    #define NOM_FONCTION( fonction)   _##fonction
  #endif
 #endif

 #ifndef HUGE
    #define HUGE
 #endif
 #define INT32  int
 #define UINT32 unsigned int
 #define BOOL32 int


/********************************/
/*** APIs d'accès à la compta ***/
/********************************/
DLLCOMPTAAPI(short) NOM_FONCTION(CptaIsPresente)( );
DLLCOMPTAAPI(short) NOM_FONCTION(CptaIsPresenteSaufPiece)( const char FAR* pcszPiece);
DLLCOMPTAAPI(short) NOM_FONCTION(PcAAuMoinsUnCompte)( );
DLLCOMPTAAPI(short) NOM_FONCTION(CptaIsCompte)( const char FAR* pcszCompteATester, const char FAR* pcszRacine);
DLLCOMPTAAPI(void)  NOM_FONCTION(CptaGetCompteFormate)( char FAR* pcszCompteATester, int nLenBuffer);
DLLCOMPTAAPI(void)  NOM_FONCTION(CptaGetJournaux)( char* pcszJnlODR, int nLenJnlODR,
                                                   char* pcszJnlINVR, int nLenJnlINVR,
                                                   char* pcszJnlINVRC, int nLenJnlINVRC,
                                                   char* pcszJnlCONT, int nLenJnlCONT);
DLLCOMPTAAPI(short) NOM_FONCTION(JnxGetJournalSelectionne)(char* pCodeJournal);
DLLCOMPTAAPI(short) NOM_FONCTION(JnxJournalExiste)(char* pCodeJournal);

DLLCOMPTAAPI(short) NOM_FONCTION(PCOpen)();
DLLCOMPTAAPI(short) NOM_FONCTION(PCClose)();
DLLCOMPTAAPI(short) NOM_FONCTION(PCGetGTEQ)( const char FAR*, CPTA_PC FAR*);
DLLCOMPTAAPI(short) NOM_FONCTION(PCCreerCompte)( const CPTA_PC FAR*);
DLLCOMPTAAPI(short) NOM_FONCTION(PCGetSuivant)( CPTA_PC FAR*);
DLLCOMPTAAPI(short) NOM_FONCTION(PCCreerCompteDlg)( HWND h, char FAR szCompteCree[ 13 + 1], char FAR szIntituleCree[ 35 + 1], const char FAR cszRacineACreer[ 13 + 1]);
DLLCOMPTAAPI(long)  NOM_FONCTION(PCGetNbEnreg)();

DLLCOMPTAAPI(short) NOM_FONCTION(HIOpen)();
DLLCOMPTAAPI(short) NOM_FONCTION(HIClose)();
DLLCOMPTAAPI(short) NOM_FONCTION(HIGetFirstOfRacine)( const char FAR* pszChar, CPTA_HI FAR* phi );
DLLCOMPTAAPI(short) NOM_FONCTION(HIGetNextOfRacine)( CPTA_HI FAR* phi );
DLLCOMPTAAPI(short) NOM_FONCTION(HIGetRaoData)( long,       CPTA_HIRAODATA  FAR*);
DLLCOMPTAAPI(short) NOM_FONCTION(HISetRaoData)( long, const CPTA_HIRAODATA  FAR*);
DLLCOMPTAAPI(short) NOM_FONCTION(HISetPeriode)( long lIDLigne, date DateDebPeriode, date DateFinPeriode);
DLLCOMPTAAPI(long)  NOM_FONCTION(HIGetNbEnreg)();
DLLCOMPTAAPI(short) NOM_FONCTION(HIGetFirstOfIDEcriture)( unsigned long IDErciture, CPTA_HI FAR* phi );
DLLCOMPTAAPI(short) NOM_FONCTION(HIGetNextOfIDEcriture)( CPTA_HI FAR* phi );

DLLCOMPTAAPI(short)  NOM_FONCTION(InitLettragePeriode)(const date FinDePeriode);
#ifdef __BCPLUSPLUS__
	DLLCOMPTAAPI(short)  NOM_FONCTION(HILigneCouranteEstLettreeTotalementAvantFinDePeriode)(const AnsiString &Compte,const AnsiString &Lettrage,int FlagLettrage);
#endif
DLLCOMPTAAPI(short)  NOM_FONCTION(DesinitLettragePeriode)();

DLLCOMPTAAPI(short) NOM_FONCTION(EmulEcrAnnule)( const char FAR* pcszJournal, const date FAR* pcdateImput, INT32 lRevaoIDEcriture);
DLLCOMPTAAPI(short) NOM_FONCTION(EmulEcrAnnule2)(const char FAR* pcszJournal, const date FAR* pcdateImput, INT32 lRevaoIDEcriture, const char FAR* pcszComplementPiece);
DLLCOMPTAAPI(short) NOM_FONCTION(EmulEcrOpen)( const char FAR* pcszJournal, const date FAR* pcdateImput, BOOL32 bContrepasser, INT32 lRevaoIDEcriture);
DLLCOMPTAAPI(short) NOM_FONCTION(EmulEcrOpen2)(const char FAR* pcszJournal, const date FAR* pcdateImput, BOOL32 bContrepasser, INT32 lRevaoIDEcriture, const char FAR* pcszComplementPiece);
DLLCOMPTAAPI(short) NOM_FONCTION(EmulEcrInsLigne)( const char FAR* pcszCpt, const char FAR* pcszLib, const double* pcdMontant, BOOL32 bIsDebiteur, const CPTA_HIRAODATA FAR* pcraodata);
DLLCOMPTAAPI(short) NOM_FONCTION(EmulEcrValide)();
DLLCOMPTAAPI(short) NOM_FONCTION(EmulEcrSupJournalPieceDate)(const char FAR* pcszJournal,const char FAR* pcszPiece, const date FAR* pcdateImput);
DLLCOMPTAAPI(void)  NOM_FONCTION(EmulCptaCloseTables)();

DLLCOMPTAAPI(void)  NOM_FONCTION(EmulInitExportEcr)(short bCptaOpen);
DLLCOMPTAAPI(short) NOM_FONCTION(EmulAjoutEcrPourExport)();
DLLCOMPTAAPI(short) NOM_FONCTION(EmulEcrExportee)();
DLLCOMPTAAPI(void)  NOM_FONCTION(EmulDesinitExportEcr)();

#ifdef __BCPLUSPLUS__
COMPTA32API bool __fastcall AssJnCree(const CJournal& jnl);
COMPTA32API int  __fastcall AssGetIDEcriture(const AnsiString &CodeJournal,
                                             const TDateTime &DateImputation,
                                             int RaoIDEcriture,
                                             const AnsiString &ComplementPiece);
COMPTA32API bool __fastcall AssEcrOpen(const AnsiString &CodeJournal,
                                       const TDateTime &DateImputation,
                                       bool Contrepasser,
                                       int RaoIDEcriture);
COMPTA32API bool __fastcall AssEcrOpen(const AnsiString &CodeJournal,
                                       const TDateTime &DateImputation,
                                       bool Contrepasser,
                                       int RaoIDEcriture,
                                       const AnsiString &ComplementPiece);

COMPTA32API bool __fastcall AssEcrInsLigne(const AnsiString &Compte,
                                           const AnsiString &LibelleOperation,
                                           const Currency &Montant,
                                           bool IsDebiteur,
                                           const CPTA_HIRAODATA FAR* pcRAOData);

COMPTA32API bool __fastcall AssEcrAnnule(const AnsiString &CodeJournal,
                                         const TDateTime &DateImputation,
                                         int RaoIDEcriture);
COMPTA32API bool __fastcall AssEcrAnnule(const AnsiString &CodeJournal,
                                         const TDateTime &DateImputation,
                                         int RaoIDEcriture,
                                         const AnsiString &ComplementPiece);
COMPTA32API bool __fastcall AssEcrAnnule(const AnsiString &CodeJournal,
                                         const AnsiString &DebutPiece);
COMPTA32API bool __fastcall AssEcrEstPointee(int nIDEcriture);
COMPTA32API bool __fastcall AssEcrValide();
COMPTA32API void __fastcall AssCptaCloseTables();

COMPTA32API void __fastcall AssInitExportEcr(bool bCptaOpen);
COMPTA32API bool __fastcall AssAjoutEcrPourExport();
COMPTA32API bool __fastcall AssEcrExportee();
COMPTA32API void __fastcall AssDesinitExportEcr();

COMPTA32API void __fastcall DetailEcriture(const int IDEcriture, const AnsiString &strLibelle);
COMPTA32API void __fastcall AssLstDetailEcriture(const int IDEcriture, TQuery* qDetail);
COMPTA32API bool __fastcall AssPointerLigneEcriture(const int IDEcriture,
                                                    const AnsiString &asNumCompte,
                                                    const TDateTime &dateImputation,
                                                    const AnsiString &asCodeJnl,
                                                    const TDateTime &dateEP,
                                                    bool bEstCrediteur,
                                                    double dMontant);

#endif

/*************************************************/
/*** Définition des valeurs de retour des APIs ***/
/*************************************************/
#define CPTA32_FAIL 0
#define CPTA32_YES  1
#define CPTA32_NO   2

#endif /* #ifndef _CPTA_ASS_H */
